//: -L+pcred+pcre

import 
	Pth = tango.io.Path,
	tango.net.http.HttpConst,
	tango.sys.Environment,
	tango.core.Array,
	pcred.RegExp,
	tango.net.http.HttpGet,
	tango.io.device.Array,
	tango.io.device.File,
	tango.io.stream.Lines,
	tango.io.Stdout;

static base_url	= `http://bibliodiversidad.com/innovaeditor/` ;
static default_dir	= `_editor`;

void main(){
	if( !Pth.exists(default_dir) ) {
		Pth.createFolder(default_dir) ;
	}
	Environment.cwd(default_dir) ;
	
	auto ls = new Lines!(char)( new File(`../my_url.txt`) );
	foreach( _ln; ls) if(_ln.length > base_url.length ) {
		auto _path	= _ln[base_url.length .. $] ;
		int i	= rfind(_path, '.');
		assert( i > 0 && i < _path.length);
		if( _path[i..$] == `.php` ) {
			continue;
		}
		i	= rfind(_path, '/');
		if(  i > 0 && i < _path.length ) {
			auto _dir	=  _path[0..i] ;
			check_dir(_dir);
		}
		dl( _ln, _path ) ;
	}
}

void check_dir(char[] _dir){
	assert(_dir !is null && _dir.length > 0 );
	static void _check_dir(char[] __dir){
		static bool[char[]] _dirs ;
		if( __dir in _dirs ) {
			return ;
		}
		_dirs[ __dir ] = true ;
		if( !Pth.exists( __dir ) ) {
			Pth.createFolder(__dir) ;
			Stdout.formatln("{}", __dir).flush;
		}
		
	}
	int i	= 0 ;
	for( ; i < _dir.length ; i++){
		if( _dir[i] is '/' ) {
			_check_dir(_dir[0..i].dup) ;
		}
	}
	_check_dir(_dir);
	
}


void dl(char[] _url, char[] _path ) {
	assert(_path !is null);
	if( Pth.exists( _path ) ) {
		return ;
	}
	Stdout.formatln("{}", _url).flush ;
	auto u		= new HttpGet(_url) ;
	u.setTimeout(300);
	auto da		= cast(char[]) u.read() ;
	assert(u.isResponseOK);
	auto hs	 = u.getResponseHeaders;
	auto _len = hs.getInt(HttpHeader.ContentLength);
	if( _len !is 0 ) {
		assert(_len is da.length);
	}
	File.set( _path, da);
}